home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 424_02 / ED-157 / rec_chgcas.c < prev    next >
C/C++ Source or Header  |  1993-09-10  |  2KB  |  52 lines

  1. /*
  2.  * Copyright (C) 1992 by Rush Record (rhr@clio.rice.edu)
  3.  * 
  4.  * This file is part of ED.
  5.  * 
  6.  * ED is free software; you can redistribute it and/or modify it under the terms
  7.  * of the GNU General Public License as published by the Free Software Foundation.
  8.  * 
  9.  * ED is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  10.  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  11.  * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  12.  * 
  13.  * You should have received a copy of the GNU General Public License along with ED
  14.  * (see the file COPYING).  If not, write to the Free Software Foundation, 675
  15.  * Mass Ave, Cambridge, MA 02139, USA.
  16.  */
  17. #include "opsys.h"
  18.  
  19. #include "ctyp_dec.h"
  20. #include "rec.h"
  21. #include "window.h"
  22. #include "ed_dec.h"
  23.  
  24. /******************************************************************************\
  25. |Routine: rec_chgcas
  26. |Callby: change_case
  27. |Purpose: Changes the case of a portion of a record.
  28. |Arguments:
  29. |    rec is the record affected.
  30. |    byt1 is the first byte to change.
  31. |    byt2 is the last byte to change.
  32. |    table is the case-changing table, or NULL if they want capitalization.
  33. \******************************************************************************/
  34. void rec_chgcas(rec,byt1,byt2,table)
  35. register rec_ptr rec;
  36. register Int byt1,byt2;
  37. register Uchar *table;
  38. {
  39.     register Uchar *p,*q;
  40.  
  41.     if(table)
  42.         for(p = (Uchar *)(rec->data + byt1),q = (Uchar *)(rec->data + byt2);p != q;p++)
  43.             *p = table[*p];
  44.     else
  45.     {
  46.         rec->data[byt1] = toupper(rec->data[byt1]);
  47.         for(p = (Uchar *)(rec->data + byt1 + 1),q = (Uchar *)(rec->data + byt2);p != q;p++)
  48.             *p = (isspace(*(p - 1)) || ispunct(*(p - 1)))? toupper(*p) : tolower(*p);
  49.     }
  50. }
  51.  
  52.